package com.sigmatrix.h5.redisson;

import java.util.concurrent.TimeUnit;


/**
 * 定义Lock的接口类
 * @author wei.wang
 *
 */
public interface DistributedLocker {
	/**
	 * 解锁
	 * @param lockKey
	 */
    void unlock(String lockKey);

    /**
     * 加锁
     * @param lockKey
     * @param unit
     * @param timeout
     */
    void lock(String lockKey, TimeUnit unit ,int timeout);
    
    /**
     * 是否可用。
     * @param lockKey
     * @return
     */
    boolean isAvailable(String lockKey);
    
    /**
     * 加锁并执行。无需解锁。
     * @param lockKey
     * @param worker
     * @param lockTime TimeUnit.MILLISECONDS
     * @return
     */
	<T> T lockAndInvoke(String lockKey, LockedWorker<T> worker, long lockTime);
}
